home *** CD-ROM | disk | FTP | other *** search
/ GFX Sensations 1 / Graphic Sensations - Volume 1.iso / tools / amiga / gfx_card / fieldm11.lha / FieldMachine-Quick.oprx next >
Encoding:
Text File  |  1994-05-30  |  12.1 KB  |  527 lines

  1. /* The Field Machine -Quick v1.1       */
  2. /*                                     */
  3. /* ©1993 Carmen Rizzolo                */
  4.  
  5. Options Results
  6. Address 'OpalPaint_Rexx'
  7.  
  8. Version
  9. Parse Var Result VerThingy ' ' OpalName ' ' VersionNum ' ' DateNum
  10.  
  11. If Left(VersionNum,3) < 2.3 Then Do
  12.     AskBool 'It appears that you are using OpalPaint v' || VersionNum || '\n\nField-Machine requires OpalPaint v2.3 or higher\n\nShall I continue?'
  13.     If Result = 0 Then Do
  14.         Okay 'Exiting...'
  15.         Exit
  16.         End
  17.     End
  18.  
  19. If Exists('LIBS:rexxsupport.library') = 0 Then Do
  20.     Okay 'FATAL ERROR!  You are missing the rexxsupport.library\nfrom your LIBS: directory.  Check your Arexx\ninstallation.\n\nExiting...'
  21.     Exit
  22.     End
  23. Call ADDLIB('rexxsupport.library',0,-30,0)
  24.  
  25. Iff = 0
  26. Iff2 = 0
  27. DeleteBool = 0
  28. PALBool = 0
  29.  
  30. Main:
  31.     Call CheckSparePages()
  32.     Call CheckForSten()
  33.     Menu DISABLE
  34.     Call ConfirmFieldMachine()
  35.  
  36. /* Turn off Brush Outlines */
  37.     Call NoOutlines()
  38.     Call GetDefaultPath()
  39.     Call GetAnimPath()
  40.     Call WriteDefaultpath()
  41.     Call MakeDestPath()
  42.     Call GetFrameNumbers()
  43.     Call GetFieldMode()
  44.  
  45.     Okay 'Here we go.'
  46.  
  47.     A = StartFrame
  48.     Call GetTokens()
  49.  
  50.     Do Forever
  51.         B = (A * 2) + 1
  52.         If A = EndFrame Then Leave
  53.  
  54.         Call GetIFF()
  55.  
  56.         Call LookForFieldA()
  57.         Call LoadFieldA()
  58.         Call Panic()
  59.  
  60.         Call AddSparePage()
  61.         Call LookForFieldB()
  62.         Call LoadFieldB()
  63.         Call Panic()
  64.  
  65.         Call GoToFirstPage()
  66.  
  67. /* SetUp Stencil for First Page        */
  68.         Call Panic()
  69.         Call LoadStencil()
  70.  
  71. /* Enable RubThrough                   */
  72.         Call Rub()
  73.         Call SaveImage()
  74.  
  75.         A = A + 1
  76.         End
  77.  
  78.     Address Command
  79.     'Delete Ram:FieldMachine.Brush Quiet'
  80.     Address 'OpalPaint_Rexx'
  81.  
  82.     Okay 'Operation Complete'
  83.  
  84.     Exit
  85.  
  86.  
  87. CheckSparePages:
  88.     Address 'OpalPaint_Rexx'
  89.     PickPage 1
  90.     OpenPages
  91.     NumPages = Result
  92.     If NumPages ~= 1 Then Do
  93.         Okay 'FATAL ERROR:\nThis script must not be run when OpalPaint has more than one page open.\nSave all your pages and delete them so I can start with one page.\n\nExiting...'
  94.         Exit
  95.         End
  96.     Return
  97.  
  98. CheckForSten:
  99.     Address 'OpalPaint_Rexx'
  100.     Finder = Exists('Images24:Stencils/FieldMachine.Sten')
  101.     If Finder = 0 Then Do
  102.         Okay 'FATAL ERROR:  I cannot find the FieldMachine.Sten file in your\nImages24:Stencils directory.  Please properly install\nthe Field Machine before running it!.'
  103.         Okay 'Exiting...'
  104.         Exit
  105.         End
  106.     Return
  107.  
  108. ConfirmFieldMachine:
  109.     Address 'OpalPaint_Rexx'
  110.  
  111.     ReqBuild '420 130 " "'
  112.     AddBox '10 10 400 110'
  113.     AddBox '15 15 5 5 Raised'
  114.     AddBox '-20 15 5 5 Raised'
  115.     AddBox '15 -20 5 5 Raised'
  116.     AddBox '-20 -20 5 5 Raised'
  117.     AddBox '47 -53 109 31'
  118.     AddBox '-153 -53 106 31'
  119.     AddHeading 'CenterX 20 "Field Machine - Quick v1.1"'
  120.     AddHeading 'CenterX 35 "an Arexx script for OpalPaint v2.3 or higher"'
  121.     AddHeading 'CenterX 45 "by Carmen Rizzolo"'
  122.  
  123.     AddGadget 'Button NTSCButton 50 -25 Small "NTSC"'
  124.     AddGadget 'Button PALButton 103 -25 Small "PAL"'
  125.     AddGadget 'Button NoButton -50 -25 Medium "Quit"'
  126.  
  127.     Request NoOK NoCancel
  128.  
  129.     GadgetStatus NTSCButton
  130.     If Result = 1 Then PALBool = 0
  131.  
  132.     GadgetStatus PALButton
  133.     If Result = 1 Then PALBool = 1
  134.  
  135.     GadgetStatus NoButton
  136.     If Result = 1 Then Do
  137.         Exit
  138.         End
  139.     Return PALBool
  140.  
  141. NoOutlines:
  142.     Address 'OpalPaint_Rexx'
  143.     GetPrefs
  144.     Prefs = Result
  145.     If (Prefs//2048)<1024 Then Do
  146.         NewPrefs=Prefs+1024
  147.         SetPrefs NewPrefs
  148.         End
  149.     Return
  150.  
  151. GetDefaultPath:
  152.     Address 'OpalPaint_Rexx'
  153.     If Open('DefaultFile','OpalPaint:Rexx/FieldMachineDefault.TXT','r') = 1 Then Do
  154.         AnimPathDefault = ReadLn('DefaultFile')
  155.         Chucky = Close('DefaultFile')
  156.         End
  157.     Else Do
  158.         AnimPathDefault = 'Imagine:FieldAnim.imp/a.pix/'
  159.         End
  160.     Return AnimPathDefault
  161.  
  162. GetAnimPath:
  163.     Address 'OpalPaint_Rexx'
  164.     PathWarn = 1
  165.  
  166.     Do Forever
  167.         LeaveBool = 1
  168.         ReqBuild '450 161 "Choose animation pathname"'
  169.         AddBox '10 23 430 105'
  170.         AddText 'CenterX 29 "NOTE: Pathnames must end with a / character"'
  171.  
  172.         AddText 'CenterX 50 "Pathname"'
  173.         AddGadget 'String ReqAnimPathName CenterX 60 Large'
  174.         AddGadget 'Button SourceReq 25 60 80 20 " "'
  175.         AddBox '22 57 86 26'
  176.         AddHeading '29 67 "REQUESTOR"'
  177.  
  178.         AddGadget 'Button OKButton CenterX -5 Medium "Proceed"'
  179.  
  180.         InitGadget 'ReqAnimPathName ' || AnimPathDefault
  181.  
  182.         Request NoOK NoCancel
  183.  
  184.         GadgetStatus ReqAnimPathName
  185.         AnimPathName = Result
  186.  
  187.         GadgetStatus SourceReq
  188.         If Result = 1 Then Do
  189.             If PathWarn = 1 Then Do
  190.                 ReqBuild '369 76 " "'
  191.                 AddBox '5 5 358 65'
  192.                 AddText 'CenterX 10 "NOTE: You are about to use a file requestor"'
  193.                 AddText 'CenterX 20 "to choose a PATHNAME.  Do not select any"'
  194.                 AddText 'CenterX 30 "filenames.  Get the pathname only!"'
  195.                 AddGadget 'Button Okeedoke CenterX 40 Medium "Proceed"'
  196.                 Request NoOK NoCancel
  197.                 PathWarn = 0
  198.                 End
  199.             AskFileName 'Get SOURCE animation PATHNAME' "OpalPaint:" ''
  200.             AnimPathName = Result
  201.             End
  202.  
  203.         If Right(AnimPathName,1) ~= '/' Then AnimPathName = AnimPathName || '/'
  204.  
  205.         AnimPathDefault = AnimPathName
  206.  
  207.         Finder = Exists(AnimPathName)
  208.         If Finder = 1 Then Leave
  209.         If Finder = 0 Then Okay 'ERROR: Drawer not found!  Try agian...'
  210.         End
  211.  
  212.     Return AnimPathName
  213.  
  214. WriteDefaultPath:
  215.     Address 'OpalPaint_Rexx'
  216.     Call Open('DefaultWrite','OpalPaint:Rexx/FieldMachineDefault.TXT','w')
  217.     Call WriteLn('DefaultWrite',AnimPathName)
  218.     Call Close('DefaultWrite')
  219.     Return
  220.  
  221. MakeDestPath:
  222.     Address 'OpalPaint_Rexx'
  223.     Finder = Exists(AnimPathName || 'Field/')
  224.     If Finder = 0 Then Do
  225.         Address Command
  226.         'MakeDir ' || AnimPathName || 'Field'
  227.         Address 'OpalPaint_Rexx'
  228.         End
  229.     Return
  230.  
  231. GetFrameNumbers:
  232.     Address 'OpalPaint_Rexx'
  233.     LeaveBool = 1
  234.     StartDefault = 1
  235.     EndDefault = 2
  236.     Do Forever
  237.  
  238.         ReqBuild '320 160 "Frame numbers"'
  239.         AddBox '5 25 309 102'
  240.  
  241.         AddText 'CenterX 35 "Enter First Frame number as"'
  242.         AddText 'CenterX 45 "a normal ODD number."'
  243.         AddGadget 'Integer StartGad CenterX 55 35 16'
  244.  
  245.         AddText 'CenterX 80 "Enter Last Frame number as"'
  246.         AddText 'CenterX 90 "a normal EVEN number."'
  247.         AddGadget 'Integer EndGad CenterX 100 35 16'
  248.  
  249.         AddGadget 'Button OkayGad CenterX -5 Medium "Proceed"'
  250.  
  251.         InitGadget 'StartGad ' || StartDefault
  252.         InitGadget 'EndGad ' || EndDefault
  253.         Request NoOK NoCancel
  254.  
  255.         GadgetStatus StartGad
  256.         StartFrame = Result
  257.  
  258.         GadgetStatus EndGad
  259.         EndFrame = Result
  260.  
  261. /* Convert Starting Frame number to    */
  262. /* an odd number if need be            */
  263.  
  264.         If StartFrame/2 = StartFrame%2 Then Do
  265.             StartFrame = StartFrame + 1
  266.  
  267.             ReqBuild '320 135 "Warning!"'
  268.             AddBox 5 25 309 77
  269.             AddText 'CenterX 35 "Starting frame MUST be an odd number!"'
  270.  
  271.             AddGadget 'Check YesGad 20 49 Medium'
  272.             AddText 'Right YesGad 5 6 "Oops, I meant ' || StartFrame || '."'
  273.             AddGadget 'Check NoGad Below YesGad 0 1 Medium'
  274.             AddText 'Right NoGad 5 6 "Try Again"'
  275.  
  276.             AddGadget 'Button ProceedGad CenterX -5 Medium "Proceed"'
  277.  
  278.             InitGadget 'YesGad 1'
  279.             MutualEx 'YesGad NoGad'
  280.             Request NoOK NoCancel
  281.  
  282.             GadgetStatus NoGad
  283.             If Result = 1 Then LeaveBool = 0
  284.             End
  285.  
  286. /* Check to make sure Ending Number is */
  287. /* higher than Starting Number         */
  288.  
  289.         If EndFrame <= StartFrame Then Do
  290.             Okay 'FATAL ERROR!  Ending number must be higher than the starting number.\nConsult the documentation!  Exiting...'
  291.             Exit
  292.             End
  293.  
  294. /* Check to see if Ending number is an */
  295. /* even number                         */
  296.  
  297.         If EndFrame/2 ~= EndFrame%2 Then Do
  298.             EndFrame = EndFrame + 1
  299.             ReqBuild '320 135 "Warning!"'
  300.             AddBox 5 25 309 77
  301.             AddText 'CenterX 35 "Ending frame MUST be an even number!"'
  302.  
  303.             AddGadget 'Check YesGad 20 49 Medium'
  304.             AddText 'Right YesGad 5 6 "Oops, I meant ' || EndFrame || '."'
  305.             AddGadget 'Check NoGad Below YesGad 0 1 Medium'
  306.             AddText 'Right NoGad 5 6 "Try Again"'
  307.  
  308.             AddGadget 'Button ProceedGad CenterX -5 Medium "Proceed"'
  309.  
  310.             InitGadget 'YesGad 1'
  311.             MutualEx 'YesGad NoGad'
  312.             Request NoOK NoCancel
  313.  
  314.             GadgetStatus NoGad
  315.             If Result = 1 Then LeaveBool = 0
  316.  
  317.             End
  318.     If LeaveBool = 1 Then Leave
  319.     StartDefault = StartFrame
  320.     EndDefault = EndFrame
  321.     End
  322.  
  323. /* Process StartFrame and EndFrame     */
  324.  
  325.     StartFrame = (StartFrame - 1) / 2
  326.     EndFrame = EndFrame / 2
  327.  
  328.     Return StartFrame EndFrame
  329.  
  330. GetFieldMode:
  331.     Address 'OpalPaint_Rexx'
  332.     ReqBuild '340 222 "Field Conversion Options"'
  333.  
  334.     AddBox '5 25 329 60'
  335.     AddText 'CenterX 35 "Choose resolution of frames"'
  336.  
  337.     If PALBool = 0 Then AddGadget 'Cycle ResGad CenterX 55 90 20 736x476 640x400 368x236 320x200 160x100'
  338.     If PALBool = 1 Then AddGadget 'Cycle ResGad CenterX 55 90 20 736x576 640x512 368x286 320x256 160x128'
  339.  
  340.     AddBox '5 155 329 34'
  341.     AddGadget 'Check DeleteGad 30 162 Medium'
  342.     AddText 'Right DeleteGad 5 6 "Delete original fields."'
  343.  
  344.     AddGadget 'Button OkayButton CenterX -5 Medium "Proceed"'
  345.  
  346.     InitGadget 'FullHeight 1'
  347.     MutualEx 'FullHeight HalfHeight'
  348.     Request NoOK NoCancel
  349.  
  350.     GadgetStatus ResGad
  351.     DestPageX = Left(Result,3)
  352.     DestPageY = Right(Result,3)
  353.  
  354.     GadgetStatus DeleteGad
  355.     If Result = 1 Then DeleteBool = 1
  356.  
  357.     Return DestPageX DestPageY DeleteBool
  358.  
  359. GetIff:
  360.     Address 'OpalPaint_Rexx'
  361.     Iff = 'pic.000' || B
  362.     If B < 10000 & B > 999 Then Iff = 'pic.' || B
  363.     If B < 1000 & B > 99 Then Iff = 'pic.0' || B
  364.     If B < 100 & B > 9  Then Iff = 'pic.00' || B
  365.  
  366.     Iff2 = 'pic.000' || (B + 1)
  367.     If (B + 1) < 10000 & (B + 1) > 999 Then Iff2 = 'pic.' || (B + 1)
  368.     If (B + 1) < 1000 & (B + 1) > 99 Then Iff2 = 'pic.0' || (B + 1)
  369.     If (B + 1) < 100 & (B + 1) > 9  Then Iff2 = 'pic.00' || (B + 1)
  370.  
  371.     Iff3 = 'pic.000' || A
  372.     If A < 10000 & A > 999 Then Iff3 = 'pic.' || A
  373.     If A < 1000 & A > 99 Then Iff3 = 'pic.0' || A
  374.     If A < 100 & A > 9  Then Iff3 = 'pic.00' || A
  375.  
  376.     Return Iff Iff2 Iff3
  377.  
  378. LookForFieldA:
  379.     Address 'OpalPaint_Rexx'
  380.     WaitCounter = 1
  381.     Do Forever
  382.         If Open('render',AnimPathName || IFF,'r') = 1 Then Do
  383.             Brad = Close('render')
  384.             Menu DISABLE
  385.             Address Command
  386.             'Copy ' || AnimPathName || IFF || ' Ram: Quiet'
  387.             Leave
  388.             End
  389.         Else Do
  390.             Address 'OpalPaint_Rexx'
  391.             Menu ENABLE
  392.             DisplayStatus 'Waiting ' || WaitCounter
  393.             WaitCounter = WaitCounter + 1
  394.             Call Delay(3000)
  395.             Address 'OpalPaint_Rexx'
  396.             End
  397.         End
  398.     Return
  399.  
  400. LoadFieldA:
  401.     Address 'OpalPaint_Rexx'
  402.     Loader Intelligent
  403.     LoadComponents IMAGE
  404.     Load 'Ram:' || IFF
  405.     If Tokens ~= '' Then PageSize DestPageX DestPageY Tokens 0
  406.     If Tokens = '' Then PageSize DestPageX DestPageY 0
  407.     Address Command
  408.     'Delete ram:' || IFF || ' Quiet'
  409.     Address 'OpalPaint_Rexx'
  410.     Return
  411.  
  412. LookForFieldB:
  413.     Address 'OpalPaint_Rexx'
  414.     WaitCounter = 1
  415.     Do Forever
  416.         If Open('render',AnimPathName || IFF2,'r') = 1 Then Do
  417.             Brad = Close('render')
  418.             Menu DISABLE
  419.             Address Command
  420.             'Copy ' || AnimPathName || IFF2 || ' Ram: Quiet'
  421.             Leave
  422.             End
  423.         Else Do
  424.             Menu ENABLE
  425.             DisplayStatus 'Waiting ' || WaitCounter
  426.             WaitCounter = WaitCounter + 1
  427.             Delay 3000
  428.             Address 'OpalPaint_Rexx'
  429.             End
  430.         End
  431.     Return
  432.  
  433. LoadFieldB:
  434.     Address 'OpalPaint_Rexx'
  435.     Loader Intelligent
  436.     LoadComponents IMAGE
  437.     Load 'Ram:' || IFF2
  438.     If Tokens ~= '' Then PageSize DestPageX DestPageY Tokens 0
  439.     If Tokens = '' Then PageSize DestPageX DestPageY 0
  440.     Address Command
  441.     'Delete ram:' || IFF2 || ' Quiet'
  442.     Address 'OpalPaint_Rexx'
  443.     Return
  444.  
  445. GetTokens:
  446.     Tokens = ''
  447.     Tokens2 = ''
  448.     If DestPageX = 736 Then Tokens = 'HIRES INTERLACE OVERSCAN'
  449.     If DestPageX = 640 Then Tokens = 'HIRES INTERLACE'
  450.     If DestPageX = 368 Then Tokens = 'OVERSCAN'
  451.     Return Tokens
  452.  
  453. Panic:
  454. /* Turn off all special functions            */
  455.     Address 'OpalPaint_Rexx'
  456.     Panic
  457.     DeleteSten
  458.     ExcludeAll DISABLE
  459.     EnableColEntry 1 DISABLE
  460.     EnableColEntry 2 DISABLE
  461.     EnableColEntry 3 DISABLE
  462.     EnableColEntry 4 DISABLE
  463.     EnableColEntry 5 DISABLE
  464.     EnableColEntry 6 DISABLE
  465.     StenEnable = 0
  466.     Trans Disable
  467.     SetDrawMode 1
  468.     ActiveNozzle 1
  469.     ResetATool
  470.     Texture = 0
  471.     AntiAlias DISABLE
  472.     Menu DISABLE
  473.     Return
  474.  
  475. AddSparePage:
  476.     Address 'OpalPaint_Rexx'
  477.     If Tokens ~= '' Then AddPage DestPageX DestPageY Tokens
  478.     If Tokens = '' Then AddPage DestPageX DestPageY
  479.     PickPage 2
  480.     Return
  481.  
  482. GoToFirstPage:
  483.     Address 'OpalPaint_Rexx'
  484.     PickPage 1
  485.     SecondaryPage 2
  486.     Return
  487.  
  488. LoadStencil:
  489.     Address 'OpalPaint_Rexx'
  490.     Loader Intelligent
  491.     LoadComponents Stencil
  492.     Load 'Images24:Stencils/FieldMachine.Sten'
  493.     Refresh
  494.  
  495.     WorkMode IMAGE
  496.     'MaskSten Enable'
  497.     'StenEnable Enable'
  498.     Return
  499.  
  500. Rub:
  501.     Address 'OpalPaint_Rexx'
  502.     RubDirection 0
  503.     RubMode ABSOLUTE
  504.     TextureType RUBTHROUGH
  505.     'Texture  ENABLE'
  506.     Zap
  507.     Refresh
  508.     DeleteSten
  509.     Refresh
  510.     DeletePage 2
  511.     Return
  512.  
  513. SaveImage:
  514.     Address 'OpalPaint_Rexx'
  515.     Save 'Ram:' || Iff3
  516.     Address Command
  517.     'Copy Ram:' || IFF3 || ' ' || AnimPathName || 'Field Quiet'
  518.     'Delete Ram:' || IFF3 || ' Quiet'
  519.     Address 'OpalPaint_Rexx'
  520.     If DeleteBool = 1 Then Do
  521.         Address Command
  522.         'Delete ' || AnimPathName || IFF || ' Quiet'
  523.         'Delete ' || AnimPathName || IFF2 || ' Quiet'
  524.         Address 'OpalPaint_Rexx'
  525.         End
  526.     Return
  527.